package com.example.lin.day10_24_webview;

import android.annotation.SuppressLint;
import android.content.DialogInterface;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebResourceError;
import android.webkit.WebResourceRequest;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    private static final String TAG = MainActivity.class.getSimpleName();
    private WebView mWebView;
    private WebSettings mWebViewSettings;
    private TextView tv_title;
    private ProgressBar progressBar;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        progressBar = findViewById(R.id.progressBar);
        tv_title = findViewById(R.id.tv_title);
        mWebView = findViewById(R.id.webView);
        initWebView();
    }


    @SuppressLint("SetJavaScriptEnabled")
    @Override
    protected void onResume() {
        super.onResume();
        //如果访问的页面中要与Javascript交互，则webview必须设置支持Javascript
        mWebViewSettings.setJavaScriptEnabled(true);
    }

    @Override
    protected void onPause() {
        super.onPause();
        //如果访问的页面中要与Javascript交互，则webview必须设置支持Javascript
        mWebViewSettings.setJavaScriptEnabled(false);
    }

    private void initWebView() {
        mWebViewSettings = mWebView.getSettings();//配置 WebView的详细的操作


// 若加载的 html 里有JS 在执行动画等操作，会造成资源浪费（CPU、电量）
// 在 onStop 和 onResume 里分别把 setJavaScriptEnabled() 给设置成 false 和 true 即可

//设置自适应屏幕，两者合用
        mWebViewSettings.setUseWideViewPort(true); //将图片调整到适合webview的大小
        mWebViewSettings.setLoadWithOverviewMode(true); // 缩放至屏幕的大小

//缩放操作
        mWebViewSettings.setSupportZoom(true); //支持缩放，默认为true。是下面那个的前提。
        mWebViewSettings.setBuiltInZoomControls(true); //设置内置的缩放控件。若为false，则该WebView不可缩放
        mWebViewSettings.setDisplayZoomControls(false); //隐藏原生的缩放控件

//其他细节操作
//        mWebViewSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); //打开webview中缓存
        mWebViewSettings.setCacheMode(WebSettings.LOAD_NO_CACHE); //关闭webview中缓存
        mWebViewSettings.setAllowFileAccess(true); //设置可以访问文件
        mWebViewSettings.setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口
        mWebViewSettings.setLoadsImagesAutomatically(true); //支持自动加载图片
        mWebViewSettings.setDefaultTextEncodingName("utf-8");//设置编码格式


        //步骤3. 复写shouldOverrideUrlLoading()方法，使得打开网页时不调用系统浏览器， 而是在本WebView中显示
        mWebView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                Log.d(TAG, "shouldOverrideUrlLoading: " + url);
                view.loadUrl(url);
                return true;
            }

            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                //设定加载开始的操作
                Log.w(TAG, "onPageStarted: " + url);
            }

            @Override
            public void onPageFinished(WebView view, String url) {
//                super.onPageFinished(view, url);
                Log.w(TAG, "onPageFinished: " + url);
            }

            @Override
            public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
//                super.onReceivedError(view, request, error);

            }
        });

        mWebView.setWebChromeClient(new WebChromeClient() {

            @Override
            public void onReceivedTitle(WebView view, String title) {
                tv_title.setText(title);
            }


            @Override
            public void onProgressChanged(WebView view, int newProgress) {
                Log.i(TAG, "onProgressChanged: " + newProgress + "%");
                progressBar.setProgress(newProgress);
            }

            @Override
            public boolean onJsAlert(WebView view, String url, String message, final JsResult result) {
                new AlertDialog.Builder(MainActivity.this)
                        .setTitle("JsAlert")
                        .setMessage(message)
                        .setPositiveButton("确定啊", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                result.confirm();
                            }
                        })
                        .setCancelable(false)
                        .show();
                return true;
            }

        });
    }

    public void test1(View view) {
        //一定要注意,WebView 在加载网页的时候,一定要在最后加上 /
//        mWebView.loadUrl("http://www.jd.com/");
        mWebView.loadUrl("file:///android_asset/index.html");
    }

    public void test2(View view) {

//        mWebView.canGoBack();
//
//        mWebView.canGoForward();
//
//        mWebView.canGoBackOrForward(-2);
//
//        mWebView.goBackOrForward(-2);
//
//        mWebView.goBack();//上一页
//
//        mWebView.goForward();//前一页

    }

    @Override
    public void onBackPressed() {
        if (mWebView != null && mWebView.canGoBack()) {
            mWebView.goBack();
            return;
        }
        super.onBackPressed();
    }

    @Override
    protected void onDestroy() {
        //回收WebView
        if (mWebView != null) {
            //加载空网页,清空当前页面的内容
            mWebView.loadDataWithBaseURL(null, "", "text/html", "utf-8", null);
            mWebView.clearHistory();//清空浏览历史
            ((ViewGroup) mWebView.getParent()).removeView(mWebView);//移除WebView的对象
            mWebView.destroy();//销毁WebView
            mWebView = null;//让mWebView 引用指向Null.  断开 mWebView的对象的引用
        }
        super.onDestroy();
    }

}
